[INV-MIGRATION-181] Создать таблицу menu_db.menu_templates

Развертывание физических таблиц комплексных меню и пользовательских статусов активации

Author

Services Task & Simulation Framework Documentation

Published

July 13, 2026

NoteКраткая карточка задачи

Задача миграции 12.2: Реализация транзакционной логики ветвления списаний (HOME / OFFICE)

  • Репозиторий / Компонент: fridge-service (База fridge_db, контур INVENTORY).
  • Целевая СУБД: PostgreSQL v15+.
  • Инструкция по шагам: Реализовать низкоуровневый SQL-запрос для gRPC-метода mutateBalances (Шаги 6а и 6б). Для ветки OFFICE обязательна строгая проверка остатка перед списанием для генерации ошибки 422, в то время как для ветки HOME допускается уход баланса партии в отрицательные значения.
-- Шаблон транзакционной логики списания для gRPC: mutateBalances
-- Исполняется в цикле для каждого элемента из массива spent_items

-- ВЕТКА 6б: Сценарий OFFICE (Жесткая блокировка дефицита)
-- Шаг 1: Проверяем доступный суммарный остаток по индексам FIFO
-- SELECT SUM(quantity) FROM fridge_db.fridge_inventory WHERE home_group_id = :home_group_id AND food_element_id = :food_element_id;
-- Если доступно < требуемого расхода -> Приложение выполняет ROLLBACK и выбрасывает gRPC-код FAILED_PRECONDITION (HTTP 422)

-- Если остатка достаточно, или если выполняется ВЕТКА 6а: Сценарий HOME (Разрешен уход в минус)
-- Применяется классический каскадный FIFO-апдейт строк fridge_inventory (ORDER BY created_at ASC).
-- Пример финализирующего апдейта строки при дефиците в HOME-контуре:
UPDATE fridge_db.fridge_inventory
SET 
    quantity = quantity - :required_residual_volume, -- Уводит значение в минус
    trace_id = :x_request_id,
    updated_at = NOW()
WHERE id = :last_fifo_batch_id;